package org.springframework.security.core.userdetails;

import org.springframework.security.core.GrantedAuthority;

import java.io.Serializable;
import java.util.Collection;

/**
 * @author Dillon
 * @date 2024/7/1
 * @slogan 致敬大师 致敬未来的你
 * @desc 自定义用户对象，用来将旧系统集成到SpringSecurity中
 */
public interface UserDetails extends Serializable {

	/**
	 * 获取当前账号所具备的权限集合
	 *
	 * @return 权限集合
	 */
	Collection<? extends GrantedAuthority> getAuthorities();

	/**
	 * 获取当前用户密码
	 *
	 * @return 用户密码
	 */
	String getPassword();

	/**
	 * 获取当前用户名
	 *
	 * @return 用户名
	 */
	String getUsername();

	/**
	 * 当前账号是否未过期
	 *
	 * @return 账号是否未过期
	 */
	default boolean isAccountNonExpired() {
		return true;
	}

	/**
	 * 当前装好是否未锁定
	 *
	 * @return 账号是否未锁定
	 */
	default boolean isAccountNonLocked() {
		return true;
	}

	/**
	 * 当前账号的凭证是否未过期 比如密码到时间需要更改了
	 *
	 * @return 凭证是否未过期
	 */
	default boolean isCredentialsNonExpired() {
		return true;
	}

	/**
	 * 当前账号是否可用
	 *
	 * @return 是否可用
	 */
	default boolean isEnabled() {
		return true;
	}

}
